//
// Description: 897. 最长公共子序列
// Created by Loading on 2022/6/3.
//

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 1010;

char a[N], b[N];
// dp[i][j] 表示使用 a 的前 i 个字符和 b 的前 j 个字符时，最长公共子序列长度
int dp[N][N];

int main() {
    int n, m;
    cin >> n >> m;
    cin >> (a + 1) >> (b + 1);

    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            // i 和 j 不同时使用时
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
            // i 和 j 同时使用时，两个字符要相等
            if (a[i] == b[j]) {
                dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 1);
            }
        }
    }

    cout << dp[n][m] << endl;

    return 0;
}